package com.lfs.dingtalk.robot.domain;

import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 群消息发送请求
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GroupChatSendRequest {
    /**
     * webhook地址
     */
    protected String webhook;

    /**
     * 密钥
     */
    protected String secret;

    /**
     * 消息类型
     */
    protected Type messageType;


    /**
     * 文本类消息
     */
    @EqualsAndHashCode(callSuper = true)
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Text extends Type {
        /**
         * 文本类型
         */
        private String msgtype = "text";

        /**
         * 文本内容
         */
        protected String text;
    }

    /**
     * markdown消息
     */
    @EqualsAndHashCode(callSuper = true)
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class MarkDown extends Type {
        /**
         * 文本类型
         */
        private String msgtype = "markdown";

        /**
         * 消息标题
         */
        protected String title;

        /**
         * 文本内容
         */
        protected String text;
    }




    @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "msgtype")
    @JsonSubTypes({
            @JsonSubTypes.Type(value = Text.class, name = "text"),
            @JsonSubTypes.Type(value = MarkDown.class, name = "markdown")
    })
    @Data
    public abstract static class Type {
        /**
         * 消息类型
         */
        protected String msgtype;

        /**
         * 被@的群成员信息
         */
        protected At at;

        @Data
        @AllArgsConstructor
        @NoArgsConstructor
        public static class At {
            /**
             * 是否@所有人
             */
            protected Boolean isAtAll;

            /**
             * 被@的手机号
             */
            protected List<String> atMobiles;

            /**
             * 被@的群成员userId
             */
            protected List<String> atUserIds;
        }
    }
}
